function TreeNode(val) {
    this.val = val;
    this.left = null;
    this.right = null;
}
/**
 * @param {TreeNode} root
 * @param {number} target
 * @return {number[][]}
 */
var pathSum = function(root, target) {
    // 存放最终的结果
    let result = []
    // 存放走过的路径
    let track = []

    // 回溯算法
    function backtrack(root, sum) {
        if (!root) return
        track.push(root.val)
        sum -= root.val

        // 结束条件
        if (sum == 0 && !root.left && !root.right) {
            result.push([...track])
        }

        // 遍历
        backtrack(root.left, sum)
        backtrack(root.right, sum)
        track.pop()
    }

    // 递归入口
    backtrack(root, target)
    return result
};
